{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'\\n    @Author: King\\n    @Date: 2019.06.19\\n    @Purpose: DGL Basics\\n    @Introduction:  \\n        The Goal of this tutorial:\\n            To create a graph.\\n            To read and write node and edge representations.\\n    @Datasets: \\n    @Link : \\n    @Reference : https://docs.dgl.ai/tutorials/basics/2_basics.html\\n'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "'''\n",
    "    @Author: King\n",
    "    @Date: 2019.06.19\n",
    "    @Purpose: DGL Basics\n",
    "    @Introduction:  \n",
    "        The Goal of this tutorial:\n",
    "            To create a graph.\n",
    "            To read and write node and edge representations.\n",
    "    @Datasets: \n",
    "    @Link : \n",
    "    @Reference : https://docs.dgl.ai/tutorials/basics/2_basics.html\n",
    "'''"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Graph Creation\n",
    "\n",
    "The design of DGLGraph was influenced by other graph libraries. Indeed, you can create a graph from networkx, and convert it into a DGLGraph and vice versa:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAM8AAAD8CAYAAADQb/BcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJztnXl8TNf7xz+DRCaWkMSEBBF7ShYShNCiVEVUgvJD2qaqfC2lKqq2ImpJULWUVm2thlSI2JKKpUXRJmpJ7IqSBImQhMg+8/z+uIlmmZnM3Nx7Z5Kc9+uVF7n33Oc8w3zuOffc5zyPjIgIDAZDb2oY2gEGo7LCxMNg8ISJh8HgCRMPg8ETJh4GgydMPAwGT5h4GAyeMPEwGDxh4mEweMLEw2DwhImHweAJEw+DwRMmHgaDJ0w8DAZPmHgYDJ7UMrQDDMYrUlKA7duBuDggIwOwsACcnYEPPwQaNTK0d2WQsc1wDIMTGwssWwZERXG/5+T8d04uB4iAgQOB2bOBLl0M46MamHgYhmXjRiAgAMjO5kSiCZmME9LKlcDEidL5pwX2zMMwHEXCycoCiJAL4CMA9gDqAegEIKqoLRHXLiCAu84IYCMPwzDExgK9e3OCKOQlgBUA/AE0BxAJYBSAeAAtil9rbg6cPAm4u0vkrHrYyMMwDMuWcVO1YtQBsBCcUGoA8AbgAODv0tdmZ3PXGxg28jCkJyUFsLcvuTCghmRwU7hLANqXPmlmBjx4YNBVODbyMKRn+/Zym+QDGAPgA6gRDsAtIOhgR0yYeBjSExenddRRAXgPgCmA9ZoaZWcD8fHC+6YH7CUpQ3oyMjSeInArbsngFgxMtNlJSxPULX1h4mFIyr1795Dz6BEcNZyfCOA6gGMA5OUZa9hQSNf0hk3bGKJCRLh48SIWLFgAFxcXdOvWDXEA8mrWLNP2PoDvwS0QNAZQt/AnRJ1huRxwchLPcR1gq23VDQnix/Lz83H69GlERERg//79MDExga+vLwYOHIjr16/jhyVLEJOcDFOVin8nRrDaBmJUD2JiiHx9iczMuB/unT33I5dzx3x9uXY8ePHiBe3Zs4f8/PzI0tKSunTpQl999RVduXKFcnJy6Pvvv6fmzZvT22+/TX/99RfXl0xW0g9df2QyoqFDBf4H0h8mnurAhg1E5ublf1llMq7dhg06mU1OTqbNmzeTt7c31atXj/r370/ffvstJSQkEBFRXl4ebd68mVq0aEH9+/ens2fP/ndxTAzXFx/xmJsTxcaK8S+lF0w8VZ0i4ej75dQgoFu3btGKFSvI09OTLCwsaMSIEbRz505KS0t71SY/P5+2bdtGLVu2pL59+9Lp06cl8U1qmHiqMhru7mMAagxQPYDaAPSDlru7UqmkmJgYmjNnDr322mvUuHFjmjBhAkVFRVFOTk6J7goKCuinn36i1q1b0+uvv06///57+T6KNCpKARNPVUbDc8UVgHIK/34dIBuAzpdqo5TJ6IKDA9na2lL79u3piy++oD///JOUSmWZbgoKCigkJITatWtHPXv2pOPHj5NKpdLdz9hY7hnGzIx7/lL3PDZ0qFFM1YrDxFNVSU4uuzCg5udG4Sj0i5pz+bVq0e3izymlUCqVFBoaSo6OjtS9e3eKjo7WTzSlSUkhCg4meu89Sn/9dYqoX5/7PSWFv00RYeKpqgQFaRXPRIDk3At96gTQC3Xt5HLuy1sKpVJJYWFh1LFjR+ratStFRUVVTDRqyM3NJTMzM8rKyhLUrpCwCIOqSjnxYxsArANwDsDvAGqra1QqfoyIEBERgYULF8LExATLly+Hl5cXZDKZoK4DgKmpKdq0aYNr167Bzc1NcPtCwCIMqipa4seKqAmgJ4BEABr3ZqalgYhw4MABuLm5ITAwEIsXL0ZsbCwGDRokinCKcHFxweXLl0WzX1HYyFNVsbDQuWkBgDsaziW+fAnfrl2Rl5eHhQsXwsfHR1TBFMfFxQVxcXGS9MUHNvJUVZyduRCWUqQACAWQCUAJ4AiAXQD6qjGRI5Mh9No1zJo1CxcvXoSvr69kwgEAZ2dnox55WGxbVUXDbs0nAIYDuAxu34w9gKkAPlZjQmliAllCAmrY2IjtrVqSk5Ph6OiIp0+fSipaXWEjT1VFoeBynZX60jUCcBJAOoDn4JJrqBMOyWSoOXiwwYQDADY2NjAxMUFSUpLBfNAGE09VZvZsLnSfB3k1a6Jg5kyBHdIfY140YOKpynTpwiUJNDfX6zKSy7GpbVsMmDsXT58+Fck53XB2djbaRQMmnqrOxImvBFTu7hmZDDA3h2zVKkyKi4Obmxu6du2KK1euSOGpWox55GERBtWEmA0baK9MRtkA5ZuY6Bw/tmPHDmrUqBFFREQYxO9Lly6Ro6OjQfouD7baVsX5+++/sWDBApw9exbNmzfHX4cOofauXVzkQFoalwfAyQnw99e4KzMmJgbDhg3D+PHjMW/ePElXvvLy8mBhYYFnz55BzvP5TTQMrV6GOFy4cIHeeecdsrW1pXXr1tEbb7xBe/bs4W3v4cOH5OHhQcOHD6fMzEwBPS0fJycnOn/+vKR96gJ75qlixMXFYejQofDy8kLfvn3xzz//YMiQIYiLi8OgQYN4223SpAl+++031K1bF56enrh//76AXmvHWJ97mHiqCFeuXMG7776Lt956Cz179sSdO3cwbdo0yOVy7Nq1C8OGDYOZmogDfTAzM8PWrVvh7+8PDw8PnDp1SiDvtWOs4mHTNkOSnMxtHRgzhsjbm/szKEiv/SvXrl2jkSNHkkKhoODgYLVTKicnJ912depBdHQ0KRQK2rhxo6B21XHkyBHq3bu36P3oCxOPIRAgk82NGzdo9OjR1KhRI1q2bBm9ePFCbbvLly9Ts2bN1O4ArSi3b98mR0dHmjBhAuXm5gpuv4jHjx9Tw4YNBd8zVFGYeKSmgnv2b926Re+99x5ZW1vTV199RRkZGVq7+/zzz+mLL74Q7eNkZGTQ4MGDqVevXpQi4o5PhULxKiuPscDEIyUVyBZz584d8vf3JysrK1q0aBGlp6eX251SqSQ7Ozu6cuWKqB9LqVTSnDlzyN7eni5evChKH/3796dDhw6JYpsvTDxSoSGTzTqA3AAyBegDDQLKqVmT+tavT19++WWJFE/lceLECXJ1dRXxQ5UkNDSUrK2taffu3YLbnjFjBi1dulRwuxWBbYaTCjWV0ADAFsA8cPtqyp7lMFEqEfn666i9aJFeXf7888/w8/PT11PejBw5Em3btoWPjw/i4uKwaNEi1KghzIKui4sLDh8+LIgtoWARBlKgQyW0eeC2Q2/X1EDP3MzZ2dmws7PDlStXYGtrq6fDFSM5ORnDhw+HlZUVduzYgXr16lXY5uXLlzFq1Chcu3ZNAA+Fgb3nkQIhKpjpWQnt0KFDcHNzk1w4ALcP5/jx47CxsUH37t1x546mTd664+joiHv37iFbzehtKJh4pKCcTDY6oWclNKmnbKUxNTXFd999h0mTJqFHjx44duxYhe21bduWjTzVDh0y2eiEjpXQUlNT8fvvv8PX11eYfnkik8kwadIk/PLLL/Dz88PatWtRkacEY8tpwMQjBXpkstGKjpXQwsLCMHDgQNSvX1+YfitI7969ce7cOWzevBnjxo1Dbm4uLzvGFqbDxCMFGjLZAFzapxxwmWyUhX8vUNdQj0pohp6yqcPBwQFnz55Feno6+vTpg8ePH+ttw+h2lRp4qbx6oCVv9ILClLfFfxaoe99jZqZTzNudO3fI2tqa8vLyJPhg+qNUKmnhwoXUtGlTitUzcbuxhekw8UiFry+pJKiEtnjxYpo8ebLIH6bi7N27l6ytrSkkJESv64wpTIeJRyLu/vILveQrHh0roalUKmrXrh2dO3dOgk9UceLi4sjBwYE+//xzKigo0OkaYwrTYc88EvDXX3+h+9SpiHvvPb0z2cDcnEvg4e5ebtO///4bBQUF6NatG09PpcXJyQkxMTGIjY3F4MGDkZ6eXu41xvTcw8QjMkeOHIG3tze2bNkCjx9//C8VVDl5AFSFmWywciWXAUcHihYKjDG7piasra1x5MgRtGrVCh4eHrh586bW9ka14mbooa8qs3PnTlIoFHTmzJmSJ8qphKasXZsOmJrSi99+07mv/Px8srGxoVu3bgn7ISRk06ZN1KhRI4qMjNTYxpiy6TDxiMSaNWuoadOmFB8fr7lRsUpo5O3N/VlYCe29996jwMBAnfuLioqibt26CeC5YTl9+jQ1adKEgoOD1a6qGVPRKxYYKjBEhPnz5yMsLAzR0dGwt7fnZef27dvo0aMHbt++jQYNGpTb3s/PDx4eHpgyZQqv/oyJBw8ewMfHBx06dMCmTZvKpJxycXHBjytWwPXSJS70KSODexHt7Ax8+KHOwbMVxsDirVIUFBTQxx9/TO7u7oLsqvT396cFCxaU2+7FixdkYWEh6k5OqXn58iWNHDmS3N3dKTEx8b8TMTEU26wZ5deqxXsLu1Aw8QhEdnY2DR06lPr160fPnz8XxOY///xDVlZW9OzZM63tduzYQV5eXoL0aUyoVCpaunQp2dracsvvhTtxlUZSdp6JRwDS09Opd+/eNGLECMrJyRHU9kcffUTz58/X2mbAgAG0c+dOQfs1Jg4cOEABdetSvqlpCZHcA2ggQA0AsgFoMkD5arawiwUTTwV5/Pgxubq60uTJk3V+0acP9+7dIysrK3r69Kna848ePSILCwt6+fKl4H0bDTExpFQT3jSwcOt6NkCPAOoI0BqeL5j5wN7zVIC7d+/C09MTvr6+WLduHWrWrCl4Hy1atMDQoUOxatUqtedDQ0MxZMgQmOv78rUysWwZaqiJxL4HYAQAMwCNAbwN4GrpRtnZ3BZ4MRBFktWAS5cuka2tLW0QeV5NRPTvv/+SpaUlPXnypMw5d3d3io6OFt0Hg6ElqHYjQO8B9BKgRIA6ABRegaBafWEjDw9OnjyJ/v3745tvvsFEHd/+VwR7e3uMGDECK1euLHH8xo0bSEpKQt++6srxVhG0bD1/A9xIUx9AUwDuAHzUNdRzC7uuMPHoyf79+/Huu+9i165dePfddyXrd86cOfjhhx/w5MmTV8dCQkIwatQoUaaLRoOGLewqAAMADAXwEkAqgDQAs9TZ0HMLu84IPpZVYTZv3kyNGzc2WLmLSZMm0cyZM4mIW8Zt0aIFXbhwwSC+SIa3t9op25PCvU/pxY7tK5y6qV2+9vYW3DU28ugAEWH58uX46quvcPLkSbi5uRnEj9mzZ2PLli1ITk7G2bNnYW5uDldXV4P4IhkatrBbA3AAsBHcztt0AD8CcNFkR8ct7PrAkh6Wg0qlQkBAAI4ePYozZ84YJJVTEU2bNsWYMWMQHByMrKysShdBzQtnZ9DevZCpmbqFA/gUQBCAmgD6AFitzoYeW9j1gcW2aSE/Px9jx47FvXv3cPDgQTQU4e6lLw8fPkSHDh0gk8lw8eJF3rFzlYULv/6KDl5eqF2Rr6meCSN1hU3bNPDy5UsMGTIE6enpiI6ONgrhAICtrS169eoFc3PzKi2chIQE+Pn5YfBHH+Fxp04gviOsTAZ4eYkSLMrEo4Znz56hX79+UCgUCA8PN7oXkESEtLQ0PHz40NCuCE5mZibmz58PV1dXODg44ObNm7D/7jvI+BbzlcuB2bOFdbIIwZcgKjkJCQn02muv0cyZM40mS0tx0tLSqH79+jRp0iT65JNPDO2OYCiVStq6dSvZ2trS6NGj6f79+yUbVKA8i1gw8RTj+vXr1Lx5cwoODja0KxrZvHkz+fr60uPHj8nS0tJoMslUhN9//506depE3bt3pz///FNzww0bKN/UlAp0yTbEoqql488//yQbGxvavn27oV3RSp8+fWjv3r1ERDRz5kyaNGmSgT3iz+3bt8nX15fs7e0pNDS03JFepVKRX/v2lOThoXELO5mZcVvcRQoGLQ4TDxH9+uuvZG1tTQcPHjS0K1p58OABWVpaUnZ2NhERpaSkkKWlZdkpjpGTlpZGM2bMICsrK1q6dKnOW6qPHTtG7du35+qrFm5hj3V0pFvt25fYwi4VVVM8elSZLkrScfr0aQM4qh9BQUH08ccflzj2xRdf0IQJEwzkkX7k5+fT+vXrSaFQ0Lhx4+jRo0d6Xf/WW2/Rli1bShz76aefaOTIkUK6qTNVSzx6VpkuStIRFxdnYMd1w8nJiU6ePFniWGpqKllaWtK///5rIK90IzIykhwdHalv37506dIlva+/cOEC2draltlsePnyZYNl06k64tGjyrTK3Jz2DxxIbdq0oXv37hnac524fPkyNW/eXG1J+Dlz5pQZkYyFK1eu0IABA6hNmza0f/9+3iuYo0aNUruQY8hsOlVDPDyWMbNq1KCMoCBDe64zM2fOpNmzZ6s99/TpU7KysqK7d+9K7JVmUlJSaOLEiWRtbU2rV6+m3Nxc3rbu3r1LlpaWlJGRofa8s7Oz3knjhaDyi0dDlemnAPkAZA5Qc4BCNL0HMMA/ur4UFBSQnZ0dXb16VWOb+fPn09ixYyX0Sj05OTm0YsUKsra2pqlTp1JqamqFbU6ZMoVmzZql8byfn1+ZZyEpqPzi8fVVO1X7P4BGAPQCoNMA1Qfoirr3ATpWHzAkx48fp06dOmlt8+zZM7KysqJ//vlHIq9KolKpaM+ePdSyZUvy9vamGzduCGL3yZMn1LBhQ3r48KHGNitWrKCpU6cK0p8+VG7xaNiimwmQCUA3ix3zA2iWhFt0heTDDz+klStXlttu4cKF9MEHH4jvUCnOnz9Pr7/+Ojk5OdHRo0cFtb1gwQIaN26c1jZHjhyh3r17C9qvLlRu8QQFqRXPBYDMSh1bAZC3OvHI5dz7ASMlKyuLGjRoQElJSeW2TU9PJ2tra8nyVSclJdEHH3xAjRs3pu+//17w7EGZmZnUqFGjckcxQxW9qtyBoRq26GYCKL2FygLAC3U2xNqiKxAHDx6Eu7u7TvuILCwsMHXqVCxevLh8wykpQHAw4OcHDB7M/RkcDBTb5q2JrKwsBAYGwsnJCU2aNMHNmzcxfvx4wbeDb926FT179kS7du20trOxsYGJiQmSkpIE7b9cJJWq0GjYonsBIHmpYys1jTwA3XdxoaNHj9L169fpxYsXhv5UJRg8eLBeIUMZGRna79Z6vgsrjlKppB07dlCzZs1oxIgRoq7u5efnk729vc6FugxR9Kpy7yTVsEW3LbitubcBtCk8dhlABw1mHjx/jmXLliExMRGJiYmoVasWmjZt+urHzs6uzO+Wlpai7+JMTU3FyZMn8fPPP+t8Tf369fHpp58iMDAQISEhJU9u3AgEBHCjrbrNZdnZ3J8REcCRIyVqA505cwbTp08HAOzatQuenp68PpOuhIWFwd7eHh4eHjq1d3FxQVxcHAYNGiSqX8Wp3OJxdgb27i0zdasDLqvKlwA2A7gEYD+As+psyOXoOXEijs+cCYDbK5Oeno6kpKRXYkpMTERsbCz27dv36vfc3NxXolInrqZNm0KhUFRoKhMWFgYvLy+9S8J/8sknaNWqFa5fvw5HR0fuYJFwsrLKN0DEtQsIQGpqKibFx+PcuXNYtmwZRo8ejRo1xJ3tExGCgoKwZMkSna9xdnbG4cOHRfSqLJV7G3ZKCmBvr/a55xmAsQCOArACsBzAaHU2eG7RffnyZQmBlRZbYmIi0tPT0bhx4zLiKi6wJk2awNTUVG0fnp6emDNnDq+76fLly3Hp0iWEhoYCsbFA795lhNMbwJ/47w5qB6B0XbYsACHjx2PM6tWSbQqMjo7GjBkzEBcXp/PoHhcXh5EjR+L69esie/cflXvkUSiAgQO5aUape4AlgIjyrq/AFt06deqgbdu2aNu2rcY2ubm5ePToUQmBJSQk4Ny5c69+f/z4MaysrMoIzMTEBNeuXYODgwOysrL0/uJOmTIFrVq1wtWrV9Fh2bL/pmSlWA9gnBY7cpkMH6em6l9LtQIEBQVh5syZek2L27dvj3///RfZ2dll6vmIReUeeQCNd1WdMDcHTp7UqViuWCiVSiQnJ5cZuX799VekpqZCLpcjKSkJcrm83OcwCwuLEl+4FStW4Obp09h89Kja0bk3AD9oFw8A0RJoqOP8+fMYOnQo7ty5AxMTE72udXFxwZYtW+Au0f9n5R55AKBLF+7BVtf5fBF6VJkWk5o1a8LW1ha2trbo0qULAG7OHxERgfDwcHTr1g1EhGfPnpUQV1JSEs6cOVPimEqlKiEmhUKBJtHRyFcqoelrOBvAFwDaAVgCTlBlKEpXW/hcKCbBwcGYPn263sIB/quUzcSjD0X5orWtJBWiBCCTy1FDjyrTUnP+/HmoVCp07doVACCTyWBlZQUrKyu4uGhM64fnz5+XeQ5zr1cPJqmpatsHAXgNgCmAUACDwS2utCrdUKJ3Yf/88w9OnDiBLVu28Lpe8krZki6Mi005VabJzIzi27WjOW+9ZWhPtTJ16lRauHChILbyBw7UOdJ8AEBrNZ0XIV1taSZOnEhz587lfb3UYTpVY+Qpwt2dW7p+8oSbZsTHA2lpXKpVJyfA3x8t69RByGuv4c0TJ4yyukB+fj5CQ0Nx5swZQezVsrTUua0MgMYxW+S8dSkpKQgNDa3QalnRyENE0mRSlUymRsS+ffuoffv2FdpjIhaRkZHCloQPCiKVmvi/NIB+BVdVLR+gnwu3b9wwUPzfvHnz6H//+1+F7SgUCskyClVL8ahUKho4cCAFGeFmuNGjR9O6deuEM6gh8jwFIHeA6gJkAVA3gKI1TNlUIkeev3jxgqytren27dsVtiVlmE7lDgzliUwmw7p16xAcHIyEhARDu/OKzMxMHDp0CCNHjhTOaOG7sNLpahsBiAUXLJsO7mVpfzWXKwH8Ua8eLiYmCudTKTZv3ow+ffqgdevWFbZVFKYjBdVSPADQqlUrTJ48GZ999pmhXXlFREQEevXqhUZCv0+ZPZt3utoa5uZIHjsWXl5e8PPzw/379wV1LT8/H19//TVmCrQM7uzsLN2KmyTjm5GSlZVFDg4OdOTIEUO7QkRcSfhdu3aJY3zDBlJVIF3t8+fPacGCBWRpaUkzZszQWJ1bX3766Sfq06ePILaIuEQp7du3F8yeNqq1eIiIDh48SG3atCmT0khqHj16RA0aNBC3JPyGDZRnakrK8kSjJV3tw4cPacKECWRtbU0rVqx4lYCRDyqVijp27Ei//vprRT5VCaTMplPtxUPE7ZlZsmSJQX1YvXq1JFuo886epUi5nJSmphVKV3vt2jUaMmQINW/enHbs2KE2JVZ5HD58mFxcXATfASpVNh0mHvovtZEhEwe6ubkJvv9fE5s2baLhb7zBLT+/9x73ApRnutrTp0+Th4cHubq66l3S/o033qCQkBC9rtEFqbLpMPEUEhgYSD4+Pgbp+9q1a9SkSRPBcwBoIi8vj1q0aCFYiuGizDmtW7emt956iy5evFjuNX/++SfZ29tTfn6+ID4UR6psOkw8hWRnZ1Pr1q3p8OHDkvc9d+5cmjFjhqR9btmyhfr27Suozby8PFq/fj3Z2NjQ+++/rzUB/dChQ2nt2rWC9l+EVGE6TDzFiIqKolatWlXoIVhflEoltWjRQqe7tZDk5eVRy5Yt6ffffxfcdkZGBs2fP58sLS1p5syZ9OzZsxLnb968SY0aNaLMzEzB+yaSLptOtX3Po463334bzs7OCA4OlqzPopLw2qKlxcDExATz58/HggULBLddv359BAYGIj4+Hunp6WjXrh2+/vpr5ObmAgBWrlyJiRMnok6dOoL3DXDZdExNTcXPpiOqNCsh9+/fJysrK7pz544k/U2YMIGWLl0qSV+lyc/Pp9atW9OJEydE7efq1as0ePBgatGiBa1fv54aNmxIKSInmpQiTIeJRw1Lly4lbwlC8HNycgy+yvfTTz9Rr169JEkYePLkSWrSpAlZW1vTsWPHRO0rICBA9NcPbNqmhs8++wy3bt3CwYMHRe0nKioKHTt2NGhJ+FGjRiE5ORnHjx8XvS9XV1fk5eVh4cKFmDBhAgYOHChaHFrRrlJREVWalZjo6Ghq0aKFqG/8hw8fTps2bRLNvq6EhIRQjx49RB99Vq5cSf/3f/9HRFwkwNq1a0mhUJC/vz89ePBA0L6kCNNh4tHCu+++S/PnzxfFdlFJ+NIrUYagoKCAHB0dRY3xy83NJTs7O7pw4UKJ4xkZGTR37lyytLSkWbNmUVpammD9iR2mw8SjhYSEBLKyshJkn0lpNm/eTEONqLzJrl27qFu3bqKNPtu2baP+/ftrPJ+YmEgfffQRKRQKWr16tSCxhmKH6TDxlENwcDC9/fbbgn+pevfuTeHh4YLarAgFBQXUoUMHioyMFNy2UqkkR0dHncKPrly5Qt7e3uTg4EA7d+7kFTNXhNhhOkw85ZCbm0uOjo6CftHv379PlpaWBo/kLs3u3bupS5cugt8oDhw4QJ07d9bL7m+//Ubu7u7k5ubGeyld7DAdJh4dOHHiBDVv3lywN+LLly+n8ePHC2JLSJRKJTk5OdHBgwcFtevp6UmhoaG8/AkNDaWWLVuSl5cXxcfH63X9b7/8QhtbtiQaM4YLfh0zhqvpJNA7JiYeHRk1apTGgrr6oFKpqEOHDnTq1CkBvBKePXv2kJubm2Cjzx9//EEtW7asUABobm4urVmzhhQKBY0dO7b8BB+FZVRUtWtTlrpkJlrKqOgDE4+OJCUlkZWVVYVrbV66dIns7e0rNJcXE6VSSS4uLrR//35B7A0ZMoS+/fZbQWylp6fT7NmzydLSkmbPnk3p6ellGxVVRldTp1bXDX+6wsSjB19//TX169evQnflgIAAQUYwMdm3bx+5urpWePS5du0aKRQKwZeLExISaOzYsaRQKGjNmjX/pRArEg7Preb6wsSjB3l5edSxY0favXs3r+sLCgrI1tZWa0l4Y0ClUlGnTp0qvEgyduxYCgwMFMirssTFxZGXlxe1atWKopcsKZOjoU6pnxoATdEkIB5L2kw8enLq1Clq2rQpr/KLx44dK7ckvLFw4MABcnZ25j29TExMpIYNGwqWKEQ/6WibAAAQMklEQVQbx48fpxMNGlCBlhEms1BAJzVN4Xi8c2OxbXrSq1cv9OnTB4GBgXpfGxISAj8/PxG8Eh5vb2+YmpoiPDyc1/Vr1qzB+++/D0s90v3ypW/HjuidkwNtNfj2AFAA6KXuJBEQGalTMeNS1zH05dGjR2Rtba3X9EufkvDGwqFDh6hjx456jz5paWnSRosHBanNilr8pw9AC7Q9+/BIKcxGHh40btwYX375JSZPngzSUs6kOAcPHkSXLl10KglvLHh5ecHc3Bx79uzR67rvv/8eXl5e0kWLx8WpLd5VxAMAJwF8oM0GnzIq4twKqj75+fnk6upKO3fu1Kn94MGD6ccffxTZK+GJiooiR0dHnZOT5OTkUJMmTejy5csie1YMb2+to85igF7XZeVNzz1cbOThSa1atfDtt98iICAAz58/19o2NTUVp06dgq+vr0TeCceAAQNgYWGB3bt369R+x44dcHV1hbOzs8ieFcPCQuvpn1DOqFOEnmVUmHgqQI8ePTBgwAAsXLhQa7vdu3fDy8sL9erVk8YxAZHJZAgMDMSiRYugVCq1tlWpVFixYgU+//xzibwrxNmZq5uqhrMAkgC8W54NuZyr4aQPIg2k1Ybk5GRq1KgRxcXFFR3gHmCLxVOtb96cjuo4vTNGVCoVeXp60o4dO7S2Cw8Pp65du0qypbsEGsqoEEDjAfLTZcrGo4wKE48AbNiwgT52dSWVjw/3n1DqPzILhTVuBIinMhTHjh2jNm3acDFqam4QqqAgGtC5M+3Zs8cwDvr6lh+Soy1Uh8d7HiYeAVCuX09ZNWqQUoJ4KkOhUqlofKdO9G/nzmpvEAWmppQtk5HSx8cwN4iYGP1Dc1iEgYGROJ7KYGzYQAW1a2t9i2/wGwSLbatElHO3uwVQbYDGCHi3MwiV6AbxctUqegmQSoJZAFttqwjLlnEv1zQwGUAXTSezs7nrjZ3YWCAgAMjKKnMqFIAjgDoAWgE4XfxkVhZ33fnzkrhZxPykJHw9ZAhkvr7cClzpinhyOXfc1xc4eRKYOJF3XzIi0u0VOaMkKSmAvb3GN9uhAMIBvAbgHwA/q2tkZgY8eAAIXUZRSIYOBSIiuPt1MY4CGAfgFwBdATwqPG5XvJFMxn1J9+6VwlPcuHEDvXr1wtWrV6FQKLhYte3buciBtDTuPY6TE+DvL8y/uWDjZXVDSzxVBkBtAHoALp5K7bQNkKREe4XQsgTcHaDNukzfRK6kXYRKpaK3336bVq1aJXpfRbBpG1+0xFPNB/ARgGbl2eATTyUl27erPawEcB7AEwCtATQFMAWA2gmsTKbRjpBERkbi3r17mDJliuh9FcHEw5eMDLWHLwE4BmC6rnbS0gRySAQ03CCSAeSDC/M/De4zXwTwlTobEtwg8vLyMH36dKxevRqmpqai9lWcWpL1VNXQEE/1O4B/ATQv/D0T3J36GoAL6i7QM55KUjTcIIoewT8B0KTw75+BE88SdReIfINYs2YN2rZti4EDB4raT2mYePji7Mw9CJe6M48H8H/Ffl8JTkwb1dngE08lJRpuEA3BTdVkutoR8Qbx+PFjBAUF4ezZs6L1oQk2beOLv7/aw+YAGhf7qQvADIDatR0ijXaMAi0Blx8CWAcgBUAagG8AeKtrKPINYs6cOfjwww/Rtm1b0frQiGRLE1URA8RTSYqW1bY8gCYCZAGQDUCfAJQt8WpbTEwMNW7cmDIyMkSxXx5MPBXBAPFUkmOkNwiVSkXdu3eXpGS8Jti0rSJ06QKsXAmYm+t1GZmbc9e5u4vkmIDMnl32Lb2uyOXc9SIQEhKCvLw8+Bty2msw2VYldMxSqZLJKLtGDdrz5puG9lg/jCy27cWLF2RnZ0dnzpwRxb6uMPEIRWwsN0UxM+MiB0pHEpiZEQ0dSunHjlHr1q1p27ZthvZYPyRMY1sec+bMoTFjxohmX1dYbJvQ6BBPdePGDbz++uvYt28fPD09DequXpw/zwWzRkZCBaBG8WV6uZyTj5cXN1UTaUp69+5ddOnSBXFxcbCzsyv/AhFh4jEQUVFR+Oijj3Du3DmDFvTlxZMneLhsGc5v24Z3evYUPuBSC0OHDoWbmxvmzp0raj86YdiBr3rz9ddfk4uLC6/UvYbm7Nmz1K1bN0n7PHbsGDk4OFB2drak/WqCrbYZkE8//RSdO3fGBx98AJVKZWh39CIzMxN16tSRrL+CggJMmzYNq1atgpmGF7dSw8RjQGQyGTZu3Ijk5ORy01cZGy9fvpRUPN999x1sbGzg4+MjWZ/lwWLbDEzt2rURHh6Orl27okOHDhg5cqShXdKJly9fom7dupL09fTpUwQGBuLEiROQyXSOqBMdJh4jQKFQYP/+/ejXrx9atWoF90rw8lTKkefLL7/EyJEj0bFjR0n60xUmHiPBxcUFmzZtgq+vL/766y+jTwgvlXji4uKwZ88eXL9+XfS+9IU98xgRvr6++N///gcfHx9ka0ksYgxIIR4iwrRp07BgwQJJ6vzoCxOPkTFnzhy0atUK48aNAxnxKzgpxBMeHo6nT59i/PjxovbDFyYeI0Mmk2Hr1q24desWli9fbmh3NCL2UnV2djYCAgKwZs0a1KplnE8XxulVNUculyMiIgLdunXDa6+9hiFDhhjapTKIPfKsWrUKbm5u6NOnj2h9VBQmHiPFzs4O4eHhGDRoEBwcHKStd6MDYi5VJyYmYvXq1TgvccJEfWHTNiOma9euWLt2LYYMGYIn+habFRkxR57PP/8ckyZNgoODgyj2hYKJx8gZNWoURo8ejWHDhiEvL8/Q7rxCLPH88ccfOH36NL744gvBbQsNE08lYPHixbC0tMSkSZOMZgVODPEolUpMmzYNQUFBkob+8IWJpxJQo0YN/Pzzz4iNjcXatWsN7Q4AccSzbds2yOVyjBo1SlC7YsEWDCoJdevWxYEDB+Dh4YH27dtjwIABBvVH6KXqjIwMzJs3D4cPHzaq+DVtsJGnEmFvb4+wsDC8//77uHnzpkF9EXrkCQwMhLe3N9zc3ASzKTZsJ2klZMuWLQgKCsJff/2FhgZK1yuXy/H06VOY65k5SB03b96Ep6cnrl69ChsbGwG8kwYmnkrKZ599hvj4eERFRUn+Bl6pVMLExARKpVKQKZaXlxfefPNNzJgxQwDvpINN2yopwcHBqFmzpkG+cFlZWTA3NxdEOIcPH8bdu3fxySefCOCZtDDxVFJq1aqF0NBQHDlyBJs2bZK0b6GedwxVGkQo2GpbJaZBgwY4ePAgevbsiXbt2uGNN96QpF+hxLN27Vq0adNG8tIgQsFGnkpOmzZtEBISgpEjR+Lu3buS9CnEMvXjx4+xfPlyrF69WiCvpIeJpwrQr18/zJs3D++88w6eP38uen9CjDxz586Fv7+/YUqDCASbtlURJk+ejCtXrmDMmDGIiIhAzZo1ReurohHV58+fR2RkJG7cuCGgV9LDRp4qgkwmw7p165CZmSl6Ns2KjDxEhKlTp2LJkiWw0FB5rrLAxFOFMDExQVhYGMLCwrBjxw7R+qmIeHbu3Gn40iACwaZtVQxra2scOHAAffr0QZs2beDh4SF4H3zFk5mZiVmzZmH37t2oUaPy37cr/ydglKFDhw7YunUrhg0bhoSEBMHt811tW758OXr37o0ePXoI7pMhYCNPFcXb2xuffvopfHx8cPr0aUFi0IrgM/LcvXsX3333HS5duiSYH4aGjTxVmICAAHTo0AH+/v6CbqLjI56AgABMnz4dTZs2FcwPQ8PEU4WRyWTYtGkTEhISsHjxYsHs6rtUffz4cVy8eLHSBX6WB5u2VXHMzMywb9++V2mshg8fXmGb+ow8BQUF+PTTT42qNIhQsJGnGtC4cWNERERg4sSJuHjxYoXt6SOe77//HgqFAr6+vhXu19hg4qkmdOrUCRs3boSPjw8eP35cIVu6iufp06dYtGgRvvnmm0qztVofmHiqEcOHD8fYsWPh6+uLnOLFePVE16XqL7/8EiNGjICTkxPvvowZJp5qxvz589GsWTNMmDCB9wqcLiNPfHw8wsLCEBgYyKuPygATTzWjRo0a2L59O+Lj47Fq1SpeNspbbTP20iBCwVbbqiHm5ubYv38/PDw84OjoiEGDBul1fXkjT3h4OFJTUzFhwoSKumrUsJGnmtKsWTPs3bsXH374Ia5evarXtdrEU1Qa5JtvvjHa0iBCwcRTjfHw8MCqVavwzjvv4OnTpzpfp008q1atQufOndG3b1+h3DRaWOopBmbNmoWYmBhER0fDxMREa1ttaacSExPh4uKC8+fPG32FAyFg4mFAqVTCx8cHdnZ22Lhxo9Z3Ms+fP4etrS0yMzPLnBszZgwcHBzw1Vdfiemu0cCmbQzUrFkTISEh+OOPP7BhwwatbTVN2c6cOYNTp05h9uzZYrlpdFTtJzqGztSvXx8HDhxAjx490L59e7z55ptq26lbplapVJg6dWqlKQ0iFGzkYbyiZcuWCA0NxejRo3H79m21bdSNPNu2bYOZmVmlKQ0iFOyZh1GGTZs2YfXq1Th37hwaNGjAHUxJAbZvR8rx47gVE4OegwYBzs54PmwY2vXsiUOHDlWqCgdCwMTDUMvUqVNx+/ZtHFqwADWDg4GoKO5E8Zg4uRz5eXmIb9oUncPCgC5dDOOsgWDiYailoKAA6zt2xKQ7d2CqVAJaviYkk0EmlwMrVwITJ0ropWFhzzwMtdT64QdMe/AApgUFr4RzHUBfABYAWgPYV9hWRgRkZQEBAcDGjYZx2ACwkYdRlthYoHdvThCFFAB4DcD/AEwDcBLAYAAXAZRImGtuDpw8Cbi7S+auoWAjD6Msy5YB2dklDt0A8BDAdAA1wY1AngDKpFbMzuaurwYw8TBKkpLCLQ6UmpCom54QgCtlDhIQGQk8eSKSg8YDEw+jJNu3qz3cHoACwAoA+QCiwU3dstQ1lsk02qlKMPEwShIXV3I5uhATABEADgNoDGAVgBEA1GZhy84G4uNFdNI4YOE5jJJkZGg85QxutCmiB4APNDVOSxPOJyOFjTyMkmgp+xEHIAfcVG0lgEcA/DU1NlCJeylh4mGUxNkZ0JCccAeAJuCefY4DOAqgtrqGcjlQRTPmFIe952GUJCUFsLdX+9yjM2ZmwIMHQKNGwvllhLCRh1EShQIYOJBbMeODTAZ4eVV54QBs5GGoQ02Egc6wCANGtaZLFy7IU9+aPubm3HXVQDgAW6pmaKIoOjoggHtvo22CIpNxiwTVLKqaTdsY2jl/notVi4zkRFI85k0u50Tl5QXMnl1tRpwimHgYuvHkCRdyEx/PvQBt2JBbjvb3rxaLA+pg4mEweMIWDBgMnjDxMBg8YeJhMHjCxMNg8ISJh8HgCRMPg8ETJh4GgydMPAwGT5h4GAyeMPEwGDxh4mEweMLEw2DwhImHweAJEw+DwRMmHgaDJ0w8DAZPmHgYDJ4w8TAYPGHiYTB4wsTDYPCEiYfB4AkTD4PBEyYeBoMnTDwMBk+YeBgMnjDxMBg8YeJhMHjy/1T5TNIADAHeAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import networkx as nx\n",
    "import dgl\n",
    "\n",
    "g_nx = nx.petersen_graph()\n",
    "g_dgl = dgl.DGLGraph(g_nx)\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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cfXnDBAzZ87M1db27dsFIPz8/HT6HRRE/V7d3d1zfUllZGRkf7keOXIk13F9/57qz2fez7IQQqSkpAhbW1vRokWL7GNJSUmibNmyolu3bgIQ3333XfZr6n8bP/74Y/axX375JfsLKCkpKft4cnKy8Pb2FoBYvXp1rvOqf7dDhgwRGRkZWn8v6gD1008/ibJly4pnnnlGxMbG5it/6dIl4ejoKNzc3MTNmzdFSkqKaNSokbCyshK7du3KV14TswSoqVOn5quzd+9eAYj33nsv+9iBAwcEIDp27JivfGZmpqhXr57eASrvP2i18ePHCyBXdM8pKChIWFtbi8ePHwshhDh69KgARLNmzYRSqdRYJ6eCAlRoaKgAxIQJEzS+rv7Aqb91nz59KhwcHISjo6NISEjIV179wdE1QNWrV09YWVnl+iZUmzNnToEB6vPPP9fpHDl9+umn+YKNEP8GqMjIyHx1Vq5cme+qIOfnLDMzM1+dWrVqiYoVK+rdv7zU71XTVd/3338vAPHVV19lH9P37ylEwQFKCCF8fHyElZWVePjwoRBCiC1btmS3UalSJTFw4MDssr169RJAri/arl27CkDs2LEjX9u7d+/WeCUICBsbGxEXF6exTzkD1Lx584RCoRDt27fP7qMmv/76a/a/6eHDh2uNB9qYZZK8RYsW+Y65u7sD8OjRo+xjx44dA6BTp075yltbW9O+fXuuXLmi17lbtWql8bh6TisiIkLjnE98fDxKpZKLFy/i7e3Nn3/+CUD37t2xsira1J363NeuXdOYu3Tp0iVAdXfS39+f8+fPk5KSQocOHXB2ds5X3sfHR+e5qMePH3PlyhXc3d01poW0b9++wPrafp8AZ86cYcGCBURGRnLnzh3S0tJyva5pzrFMmTK0bds233H13NZff/2V77VmzZphbW2d77i7u3uBc5X60vVzq+/fUxedO3cmPDyc8PBw+vTpw969eylbtiwdO3bE19eXvXv3AqBUKomMjMTT05MaNWpk1z927BhWVlYa04M6deqEtbW1xt9t7dq1qVy5coF9e+eddwgNDeWll17i559/xs7OTmvZAQMGsGfPHr777jsiIyNp37599vybLgoNUOp/jAVNZqlf0/YPt0KFCvlPXEZ1aqVSmX1MPflYpUoVje1UrVq1sO7qXOfBgwcALFiwoMD6ycnJACQkJADk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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.subplot(121)\n",
    "plt.title('Undirected graph ,networkx',fontsize=20)\n",
    "nx.draw(g_nx, with_labels=True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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R45Ev379kJCQYNa6SqSEuaYAMATAdwCSAKQBWAKgW9FEMhlQv765LLQo/DumFdKnTx/s378fSUlJkMvlFqnzzTffRGJiIh49egShHieMWdGzAmA+SmhWANwMQArNCg3zX/9fix2tAMi3mFbGjh07sH37duzevdtiogSAU6dOISsrC127drVYnYUoYa4poHH4rACQDuAZgGUoIkqGAbp2tQtRAuCD2K2JlJQUkkgkNHToUE7qP3/+PLEsS7Nnz+akflPNNbUHeGFaEfXr1yd/f39OJyUvXryYWJalkydPcmPAihWk5mNleWFaC19++SUJBAKjQ+3MQbdu3Ugul1NaWprF605JSaFpXl6kEAhIzc8u4eGSixcvEsuytHz5cq5NISJN8HmVKlWodu3aFqszPT2dpkyZog3Ru7F+vd65puoCc03tqftaEF6YHKNUKsnDw4PatGnDtSmFePz4MYnFYho8eLDZ61q9ejU5ODiQWCwmAJpJ4PlzNYvMNd3AMHQnKspuYmL1wQuTY3r06EFOTk6kUCi4NqUYe/fuJYZhaOPGjWatZ82aNYXmi9atW1dnuuvXrxMACg4O1j/J2k7ghckhmzdvJoZh6NixY1ybopfx48eTUCiku3fvmrWeN954g1iWJZZlacCAATrTTJgwQdui/vzzz2a1h2t4YXJEYmIiicViGj16NNemlErjxo3J09OTlEqlWcr/6quvSCAQ0IULF6h///60Y8eOYmlUKhV5eHhoW1UnJye7Xq2PFyZH1K5dm6pXr861GQahUCjIxcWFQkNDTV72hQsXiGVZWrJkSYnp8id456/CwLIszZ8/3+T2WAu8MDlg4sSJJBQK6dGjR1ybYjBXrlwhgUBA06dPN1mZOTk55ObmRmFhYaWmffToES1evJjCw8PJw8ODnj17ZtfvmbwwLUxsbCwxDEM//PAD16YYTXR0NDEMQ0eOHDFJee3btycXFxfKyckxOM+GDRtIJpOZpH5rhhemBcnJySFXV1eLLYZlDt59912SyWSUkpJSrnK+++47YlmW4owch7xx4wYxDFOuum0BfnaJBencuTPOnj2LpKQkiMVirs0pE2q1GtWrV4dQKMTt27fLNIH7zp07qFOnDqZOnYoZM2YYXb9AIMCzZ89QqVIlo+u2FfjZJRZi3bp1iImJwcGDB21WlADAsixiY2Px6NEjDBgw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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplot(122)\n",
    "plt.title('Directed graph ,DGL', fontsize=20)\n",
    "nx.draw(g_dgl.to_networkx(), with_labels=True)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "They are the same graph, except that DGLGraph is always directional.\n",
    "\n",
    "One can also create a graph by calling DGL’s own interface.\n",
    "\n",
    "Now let’s build a star graph. DGLGraph nodes are consecutive range of integers between 0 and number_of_nodes() and can grow by calling add_nodes. DGLGraph edges are in order of their additions. Note that edges are accessed in much the same way as nodes, with one extra feature of edge broadcasting:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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7H5pBuYiynPYCWYwfwGeMMFxtYnT0shZbk9CgrnqNDbWbDDi42M+LtW9u1adimTxlEMjoAvwfze7hp5yyJcUziIijhIRAaNHZxrOuwAD8AXevPJaBl5eMHYshIY6rk5xOprWFhFxlCx60k8CfsXsR98baAEctHegetLnSwpnERFHyaInfRBwB2ZnvReB+mTSWQ/Ukz4fUjiLiDhKJj3p7bFhTnHbpZ70+Y7CWUTEUTLpSX8aWAdcAFIxW93+gLmJTAbqSZ8vaUGYiIijZLJaOwFoDsRhtrytBowDmtq7hlZr50saOYuIOEqZMmav7HSbX5QGooGzmKPoTWQSzDYbNG+uYM6HNHIWEXEk9aSXW6CRs4iIIwUGmi1sr+5MlV1Xe2srmPOlgjc/REREbsvVFrbqSS/ZpGltEZG8EhNj9spevdoM4eTkf752dT/n5s3N/Zw1Ys7XFM4iInlNPenlJhTOIiIiTkYLwkRERJyMwllERMTJKJxFREScjMJZRETEySicRUREnIzCWURExMkonEVERJyMwllERMTJKJxFREScjMJZRETEySicRUREnIzCWURExMkonEVERJyMwllERMTJKJxFREScjMJZRETEySicRUREnIzCWURExMkonEVERJyMwllERMTJKJxFREScjMJZRETEySicRUREnIzCWURExMkonEVERJyMwllERMTJKJxFREScjMJZRETEySicRUREnIzCWURExMkonEVERJyMwllERMTJKJxFREScjMJZRETEySicRUREnIzCWURExMkonEVERJyMwllERMTJ/D+e0TXtWeB4oAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import dgl\n",
    "import torch as th\n",
    "\n",
    "g = dgl.DGLGraph()\n",
    "g.add_nodes(10)\n",
    "# a couple edges one-by-one\n",
    "for i in range(1, 4):\n",
    "    g.add_edge(i, 0)\n",
    "# a few more with a paired list\n",
    "src = list(range(5, 8)); dst = [0]*3\n",
    "g.add_edges(src, dst)\n",
    "# finish with a pair of tensors\n",
    "src = th.tensor([8, 9]); dst = th.tensor([0, 0])\n",
    "g.add_edges(src, dst)\n",
    "\n",
    "# edge broadcasting will do star graph in one go!\n",
    "g.clear(); g.add_nodes(10)\n",
    "src = th.tensor(list(range(1, 10)));\n",
    "g.add_edges(src, 0)\n",
    "\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    "nx.draw(g.to_networkx(), with_labels=True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Feature Assignment\n",
    "\n",
    "One can also assign features to nodes and edges of a DGLGraph. The features are represented as dictionary of names (strings) and tensors, called fields.\n",
    "\n",
    "The following code snippet assigns each node a vector (len=3)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[-1.7702, -0.3649, -1.4942],\n",
      "        [ 0.0730, -0.7347,  0.0027],\n",
      "        [-0.8124,  0.1733, -0.2079],\n",
      "        [ 0.4960, -2.1087, -0.9041],\n",
      "        [-0.1506, -0.9505, -0.0782],\n",
      "        [ 0.2163,  0.7009,  0.8048],\n",
      "        [-1.0406, -0.2161,  1.2053],\n",
      "        [ 1.4934, -3.0232, -0.5926],\n",
      "        [-0.5207, -0.7075,  0.3320],\n",
      "        [-0.3033,  0.5244, -0.5926]])\n"
     ]
    }
   ],
   "source": [
    "import dgl\n",
    "import torch as th\n",
    "\n",
    "\n",
    "x = th.randn(10, 3)\n",
    "g.ndata['x'] = x\n",
    "print(g.ndata['x'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "ndata is a syntax sugar to access states of all nodes, states are stored in a container data that hosts user defined dictionary."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[1, 1, 1],\n",
      "        [1, 1, 1],\n",
      "        [1, 1, 1],\n",
      "        [1, 1, 1],\n",
      "        [1, 1, 1],\n",
      "        [1, 1, 1],\n",
      "        [1, 1, 1],\n",
      "        [1, 1, 1],\n",
      "        [1, 1, 1],\n",
      "        [1, 1, 1]], dtype=torch.uint8)\n"
     ]
    }
   ],
   "source": [
    "print(g.ndata['x'] == g.nodes[:].data['x'])\n",
    "\n",
    "# access node set with integer, list, or integer tensor\n",
    "g.nodes[0].data['x'] = th.zeros(1, 3)\n",
    "g.nodes[[0, 1, 2]].data['x'] = th.zeros(3, 3)\n",
    "g.nodes[th.tensor([0, 1, 2])].data['x'] = th.zeros(3, 3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Assigning edge features is in a similar fashion to that of node features, except that one can also do it by specifying endpoints of the edges.分配边缘特征的方式与节点特征的方式类似，只是可以通过指定边缘的端点来完成。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[ 0.4185, -0.5519],\n",
      "        [-0.5726,  0.6431],\n",
      "        [-0.0181,  3.1070],\n",
      "        [ 0.8962, -0.0104],\n",
      "        [ 1.1226,  0.2310],\n",
      "        [ 0.9468, -1.4164],\n",
      "        [ 0.3357, -0.8394],\n",
      "        [-0.1263, -2.3286],\n",
      "        [ 2.0158,  0.1741]])\n",
      "tensor([[ 0.4185, -0.5519],\n",
      "        [ 0.2827, -1.9100],\n",
      "        [-0.0181,  3.1070],\n",
      "        [ 0.8962, -0.0104],\n",
      "        [ 1.1226,  0.2310],\n",
      "        [ 0.9468, -1.4164],\n",
      "        [ 0.3357, -0.8394],\n",
      "        [-0.1263, -2.3286],\n",
      "        [ 2.0158,  0.1741]])\n",
      "tensor([[ 0.0000,  0.0000],\n",
      "        [ 0.0000,  0.0000],\n",
      "        [ 0.0000,  0.0000],\n",
      "        [ 0.8962, -0.0104],\n",
      "        [ 1.1226,  0.2310],\n",
      "        [ 0.9468, -1.4164],\n",
      "        [ 0.3357, -0.8394],\n",
      "        [-0.1263, -2.3286],\n",
      "        [ 2.0158,  0.1741]])\n",
      "tensor([[ 0.0000,  0.0000],\n",
      "        [ 0.0000,  0.0000],\n",
      "        [ 0.0000,  0.0000],\n",
      "        [ 0.8962, -0.0104],\n",
      "        [ 1.1226,  0.2310],\n",
      "        [ 0.9468, -1.4164],\n",
      "        [ 0.3357, -0.8394],\n",
      "        [-0.1263, -2.3286],\n",
      "        [ 2.0158,  0.1741]])\n",
      "tensor([[ 1.0000,  1.0000],\n",
      "        [ 0.0000,  0.0000],\n",
      "        [ 0.0000,  0.0000],\n",
      "        [ 0.8962, -0.0104],\n",
      "        [ 1.1226,  0.2310],\n",
      "        [ 0.9468, -1.4164],\n",
      "        [ 0.3357, -0.8394],\n",
      "        [-0.1263, -2.3286],\n",
      "        [ 2.0158,  0.1741]])\n",
      "tensor([[ 1.0000,  1.0000],\n",
      "        [ 1.0000,  1.0000],\n",
      "        [ 1.0000,  1.0000],\n",
      "        [ 0.8962, -0.0104],\n",
      "        [ 1.1226,  0.2310],\n",
      "        [ 0.9468, -1.4164],\n",
      "        [ 0.3357, -0.8394],\n",
      "        [-0.1263, -2.3286],\n",
      "        [ 2.0158,  0.1741]])\n"
     ]
    }
   ],
   "source": [
    "g.edata['w'] = th.randn(9, 2)\n",
    "print(g.edata['w'])\n",
    "\n",
    "\n",
    "# access edge set with IDs in integer, list, or integer tensor\n",
    "g.edges[1].data['w'] = th.randn(1, 2)\n",
    "print(g.edata['w'])\n",
    "\n",
    "g.edges[[0, 1, 2]].data['w'] = th.zeros(3, 2)\n",
    "print(g.edata['w'])\n",
    "\n",
    "g.edges[th.tensor([0, 1, 2])].data['w'] = th.zeros(3, 2)\n",
    "print(g.edata['w'])\n",
    "\n",
    "# one can also access the edges by giving endpoints\n",
    "g.edges[1, 0].data['w'] = th.ones(1, 2)                 # edge 1 -> 0\n",
    "print(g.edata['w'])\n",
    "\n",
    "g.edges[[1, 2, 3], [0, 0, 0]].data['w'] = th.ones(3, 2) # edges [1, 2, 3] -> 0\n",
    "print(g.edata['w'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After assignments, each node/edge field will be associated with a scheme containing the shape and data type (dtype) of its field value."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'x': Scheme(shape=(3,), dtype=torch.float32)}\n",
      "{'x': Scheme(shape=(4,), dtype=torch.float32)}\n"
     ]
    }
   ],
   "source": [
    "print(g.node_attr_schemes())\n",
    "g.ndata['x'] = th.zeros((10, 4))\n",
    "print(g.node_attr_schemes())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "One can also remove node/edge states from the graph. This is particularly useful to save memory during inference."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "'x'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-17-5583cc7ffb8d>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mndata\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'x'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      2\u001b[0m \u001b[0mg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0medata\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'w'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0medata\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'w'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\progrom\\python\\python\\python3\\lib\\_collections_abc.py\u001b[0m in \u001b[0;36mpop\u001b[1;34m(self, key, default)\u001b[0m\n\u001b[0;32m    793\u001b[0m         '''\n\u001b[0;32m    794\u001b[0m         \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 795\u001b[1;33m             \u001b[0mvalue\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    796\u001b[0m         \u001b[1;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    797\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mdefault\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__marker\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\progrom\\python\\python\\python3\\lib\\site-packages\\dgl\\view.py\u001b[0m in \u001b[0;36m__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m     55\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     56\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0m__getitem__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 57\u001b[1;33m         \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_graph\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_n_repr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_nodes\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     58\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     59\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0m__setitem__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mval\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mKeyError\u001b[0m: 'x'"
     ]
    }
   ],
   "source": [
    "g.ndata.pop('x')\n",
    "g.edata.pop('w')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Multigraphs\n",
    "\n",
    "Many graph applications need multi-edges. To enable this, construct DGLGraph with multigraph=True."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(tensor([1, 2, 3, 4, 5, 6, 7, 8, 9, 1]), tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))\n"
     ]
    }
   ],
   "source": [
    "g_multi = dgl.DGLGraph(multigraph=True)\n",
    "g_multi.add_nodes(10)\n",
    "g_multi.ndata['x'] = th.randn(10, 2)\n",
    "\n",
    "g_multi.add_edges(list(range(1, 10)), 0)\n",
    "g_multi.add_edge(1, 0) # two edges on 1->0\n",
    "\n",
    "g_multi.edata['w'] = th.randn(10, 2)\n",
    "g_multi.edges[1].data['w'] = th.zeros(1, 2)\n",
    "print(g_multi.edges())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "An edge in multi-graph cannot be uniquely identified using its incident nodes u and v; query their edge ids use edge_id interface."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[ 1.0000,  1.0000],\n",
      "        [ 0.0000,  0.0000],\n",
      "        [ 1.4364,  0.4434],\n",
      "        [-0.1809,  0.7359],\n",
      "        [-1.0965,  0.5050],\n",
      "        [ 1.1591, -0.5784],\n",
      "        [-0.2197, -0.5136],\n",
      "        [-1.0789, -0.5628],\n",
      "        [ 1.2346, -0.5913],\n",
      "        [ 1.0000,  1.0000]])\n"
     ]
    }
   ],
   "source": [
    "eid_10 = g_multi.edge_id(1, 0)\n",
    "g_multi.edges[eid_10].data['w'] = th.ones(len(eid_10), 2)\n",
    "print(g_multi.edata['w'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
